﻿using System;
using System.Windows.Forms;
using SpriteAnimator.Classes;

namespace SpriteAnimator
{
    /// <summary>
    /// Fenêtre de choix de projet
    /// </summary>
    public partial class frmItemChoice: Form
    {
        #region Variables d'instances

        private bool m_bEdit;

        #endregion

        #region Constructeur

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        public frmItemChoice()
        {
            this.InitializeComponent();

            // *** Initialisation ***

            this.txtName.Text = "Sprite" + frmMain.SPRITE_INDEX.ToString("00");
            this.DialogResult = DialogResult.Cancel;
            this.m_bEdit = false;
        }

        #endregion

        #region Evénements de l'IHM

        /// <summary>
        /// Se produit sur l'annulation de l'action
        /// </summary>
        /// <param name="sender">Source de l'appel</param>
        /// <param name="e">Argument de l'appel</param>
        private void cmdCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        /// <summary>
        /// Se produit sur la validation de l'action
        /// </summary>
        /// <param name="sender">Source de l'appel</param>
        /// <param name="e">Argument de l'appel</param>
        private void cmdOk_Click(object sender, EventArgs e)
        {
            // *** Vérification ***

            if ( string.IsNullOrEmpty(this.txtName.Text) )
            {
                MessageBox.Show(this, "Vous devez saisir un nom de projet.", "Projet", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            this.DialogResult = DialogResult.OK;
            this.Close();
        }

        /// <summary>
        /// Se produit sur le changement de type de projet
        /// </summary>
        /// <param name="sender">Source de l'appel</param>
        /// <param name="e">Argument de l'appel</param>
        private void rbSprite_CheckedChanged(object sender, EventArgs e)
        {
            if ( !this.m_bEdit )
            {
                if ( this.rbSprite.Checked )
                    this.txtName.Text = "Sprite" + frmMain.SPRITE_INDEX.ToString("00");
                else
                    this.txtName.Text = "Texture" + frmMain.TEXTURE_INDEX.ToString("00");

                this.m_bEdit = false;
            }
        }

        /// <summary>
        /// Se produit si on édite une fois la textbox
        /// </summary>
        /// <param name="sender">Source de l'appel</param>
        /// <param name="e">Argument de l'appel</param>
        private void txtName_TextChanged(object sender, EventArgs e)
        {
            this.m_bEdit = true;
        }

        #endregion

        #region Indexer

        /// <summary>
        /// Retourne le nom du projet
        /// </summary>
        public string ProjectName
        {
            get
            {
                return (this.txtName.Text);
            }
        }

        /// <summary>
        /// Retourne le type de projet sélectionné
        /// </summary>
        public ProjectType ProjectType
        {
            get
            {
                if ( this.rbTexture.Checked )
                    return (ProjectType.Texture);

                return (ProjectType.Sprite);
            }
        }

        #endregion
    }
}
